package bin_tree.nowercode;

import java.util.Scanner;

/**
 * @author yuisama
 * @date 2023/03/27 21:34
 * 前序遍历字符串构建树
 **/
public class Main {
    // 节点定义
    private static class TreeNode {
        char val;
        TreeNode left;
        TreeNode right;
        TreeNode(char val) {
            this.val = val;
        }
    }
    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        // 注意 hasNext 和 hasNextLine 的区别
        while (in.hasNextLine()) { // 注意 while 处理多个 case
            // 当前输入字符串
            String str = in.nextLine();
            TreeNode root = preOrderBuild(str);
            // 再按照中序遍历的方式输出这棵树
            inOrder(root);
            // 每次输出一棵树后换行
            System.out.println();
        }
    }
    // 表示当前走到字符串str的哪个字符了~
    static int index = 0;
    // 传入一个前序遍历的字符串，就能构建一棵树，返回树根节点
    public static TreeNode preOrderBuild(String str) {
        // base case
        if(index >= str.length()) {
            return null;
        }
        // 取出当前字符串的字符
        char c = str.charAt(index);
        if(c == '#') {
            // 碰到空节点不需要构建
            index ++;
            return null;
        }
        TreeNode root = new TreeNode(c);
        index ++;
        root.left = preOrderBuild(str);
        root.right = preOrderBuild(str);
        return root;
    }

    public static void inOrder(TreeNode root) {
        if(root == null) {
            return;
        }
        inOrder(root.left);
        System.out.print(root.val + " ");
        inOrder(root.right);
    }
}